export default {
  // 日期格式转换--时间字符串转化成视觉格式
  // Add by zgf, Updated on 2018/9/4
  // 使用示例：this.$util.formatDate('/Date(1435646188067+0800)/','yyyy-MM-dd hh:mm:ss')
  // 使用示例：this.$util.formatDate('2018-12-12T12:12:12','yyyy-MM-dd hh:mm:ss')
  // 使用示例：this.$util.formatDate('2018-12-12 12:12:12','yyyy/MM/dd hh:mm:ss')
  // 使用示例：this.$util.formatDate(new Date(),'yyyy/MM/dd hh:mm:ss')
  // 作为方法调用：this.$util.formatDate(时间,[格式])
  // 作为filter调用：{{时间 | formatDate([格式])}}
  formatDate: function(v, format) {
    if (!v) return ''
    var d = v
    if (typeof v === 'string') {
      if (v.indexOf('/Date(') > -1) { d = new Date(parseInt(v.replace('/Date(', '').replace(')/', ''), 10)) } else { d = new Date(Date.parse(v.replace(/-/g, '/').replace('T', ' ').split('.')[0])) } // .split(".")[0] 用来处理出现毫秒的情况，截取掉.xxx，否则会出错
    }
    var o = {
      'M+': d.getMonth() + 1,
      'd+': d.getDate(),
      'h+': d.getHours(),
      'm+': d.getMinutes(),
      's+': d.getSeconds(),
      'q+': Math.floor((d.getMonth() + 3) / 3),
      'S': d.getMilliseconds()
    }
    if (/(y+)/.test(format)) {
      format = format.replace(RegExp.$1, (d.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    for (var k in o) {
      if (new RegExp('(' + k + ')').test(format)) {
        format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length))
      }
    }
    return format
  },
  // 千分法
  // num要转化的数字 fixedNum 保留几位小数
  formatNumber: function(num, fixedNum) {
    var decimalPart = '';
    num = (+num).toFixed(fixedNum)
    num = num.toString();
    if (num.indexOf('.') !== -1) {
      decimalPart = '.' + num.split('.')[1];
      num = parseInt(num.split('.')[0]);
    }
    var array = num.toString().split('');
    var index = -3;
    while (array.length + index > 0) {
      array.splice(index, 0, ',');
      index -= 4;
    }
    return array.join('') + decimalPart;
  },
  
  // 银行卡号格式化
  formatCredicardNum(num,desensitization){
    if(typeof num !== 'string') return ''
    return num.replace(/(\d{4})(?=\d)/g, "$1 ");
  },
  
  calcHowLong(sDate,eDate){
    const startDate = sDate ? new Date(this.formatDate(sDate,'yyyy/MM/dd')) : new Date()
    const endDate = eDate ? new Date(this.formatDate(eDate,'yyyy/MM/dd')) : new Date()
    const duration = endDate.getTime() - startDate.getTime()
    return Math.floor(duration / 1000 / 60 / 60 / 24 / 365)
  },

  // 时间格式数据转化成 刚刚 n分钟前 n小时前 今天 hh:mm 昨天 hh:mm MM/dd hh:mm yyyy/MM/dd hh:mm
  // 时间格式可以是 时间对象；yyyy/MM/dd hh:mm:ss;yyyy-MM-dd hh:mm:ss;'/Date(1435646188067+0800)/';'2018-12-12T12:12:12';等任意合法的时间格式
  formatTimestamp: function(v) {
    const timeStr = this.formatDate(v, 'yyyy/MM/dd hh:mm:ss')
    const timestamp = parseInt(new Date(timeStr).getTime() / 1000);

    function zeroize(num) {
      return (String(num).length === 1 ? '0' : '') + num;
    }
    var curTimestamp = parseInt(new Date().getTime() / 1000); // 当前时间戳
    var timestampDiff = curTimestamp - timestamp; // 参数时间戳与当前时间戳相差秒数

    var curDate = new Date(curTimestamp * 1000); // 当前时间日期对象
    var tmDate = new Date(timestamp * 1000); // 参数时间戳转换成的日期对象

    var Y = tmDate.getFullYear();
    var m = tmDate.getMonth() + 1;
    var d = tmDate.getDate();
    var H = tmDate.getHours();
    var i = tmDate.getMinutes();
    // var s = tmDate.getSeconds();

    if (timestampDiff < 60) { // 一分钟以内
      return '刚刚';
    } else if (timestampDiff < 3600) { // 一小时前之内
      return Math.floor(timestampDiff / 60) + '分钟前';
    } else if (curDate.getFullYear() === Y && curDate.getMonth() + 1 === m && curDate.getDate() === d) {
      return '今天 ' + zeroize(H) + ':' + zeroize(i);
    } else {
      var newDate = new Date((curTimestamp - 86400) * 1000); // 参数中的时间戳加一天转换成的日期对象
      if (newDate.getFullYear() === Y && newDate.getMonth() + 1 === m && newDate.getDate() === d) {
        return '昨天 ' + zeroize(H) + ':' + zeroize(i);
      } else if (curDate.getFullYear() === Y) {
        return zeroize(m) + '/' + zeroize(d) + ' ' + zeroize(H) + ':' + zeroize(i);
      } else {
        // return Y + '/' + zeroize(m) + '/' + zeroize(d) + ' ' + zeroize(H) + ':' + zeroize(i);
        return Y + '/' + zeroize(m) + '/' + zeroize(d);
      }
    }
  },

  // 对象深拷贝
  deepClone: function(obj) {
    if (!(obj instanceof Object)) return obj
    return JSON.parse(JSON.stringify(obj))
  },

  // 十六进制颜色转换成rgba
  Hex2Rgba: function(str, opacity = 1) {
    str = str[0] === '#' ? str.slice(1) : str
    str = str.length === 3 ? str.repeat(2) : str
    console.log(str)
    if ((str.length !== 6) || !(/^[0-9a-fA-F]{3,6}$/i.test(str))) return 'Invalid data'
    const rgb = [parseInt(str[0] + str[1], 16), parseInt(str[2] + str[3], 16), parseInt(str[4] + str[5], 16)]
    return 'rgba(' + rgb.join(',') + ', ' + opacity + ')'
  },

  // rgb 转化为十六进制
  RgbToHex: function(a, b, c) {
    var r = /^\d{1,3}$/
    if (!r.test(a) || !r.test(b) || !r.test(c)) return ''
    var hexs = [a.toString(16), b.toString(16), c.toString(16)]
    for (var i = 0; i < 3; i++) if (hexs[i].length === 1) hexs[i] = '0' + hexs[i]
    return '#' + hexs.join('')
  },

  // HexToRgb
  HexToRgb: function(str) {
    var r = /^\#?[0-9A-F]{6}$/
    if (!r.test(str)) return window.alert('输入错误的hex')
    str = str.replace('#', '')
    var hxs = str.match(/../g)
    for (var i = 0; i < 3; i++) hxs[i] = parseInt(hxs[i], 16)
    return hxs
  },

  // 得到hex颜色值为color的加深颜色值，level为加深的程度，限0-1之间
  // color 十六进制
  darken: function(color, level) {
    var r = /^\#?[0-9A-F]{6}$/
    if (!r.test(color)) return ''
    var rgbc = this.HexToRgb(color)
    // floor 向下取整
    for (var i = 0; i < 3; i++) rgbc[i] = Math.floor(rgbc[i] * (1 - level))
    return this.RgbToHex(rgbc[0], rgbc[1], rgbc[2])
  },

  // 得到hex颜色值为color的减淡颜色值，level为加深的程度，限0-1之间
  // color 十六进制
  lighten: function(color, level) {
    var r = /^\#?[0-9A-F]{6}$/
    if (!r.test(color)) return ''
    var rgbc = this.HexToRgb(color)
    for (var i = 0; i < 3; i++) rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i])
    return this.RgbToHex(rgbc[0], rgbc[1], rgbc[2])
  },

  // 转换对象为query串
  object2query(obj) {
    if (!obj || !(obj instanceof Object)) return ''
    const originQuery = {
      ...obj
    }
    let queryStr = ''
    for (var i in originQuery) {
      queryStr += i + '=' + originQuery[i] + '&'
    }
    return queryStr
  },
  
  // 打电话
  phoneCall(phoneNum){
    uni.makePhoneCall({
    	phoneNumber: phoneNum
    });
  }



}
